/** API 接口请求,请求拦截
 *  API 接口请求配置
 *  wx login
 *  @version 1.0.0
 *  @author win
 */
var app = getApp();
var uti = require("../utils/util.js");
var Fly = require("./fly/npm/wx.js");
var fly = new Fly();
//设置超时
fly.config.timeout = 15000;
fly.config.withCredentials = true;
//设置请求基地址
fly.config.baseURL = '';

//添加请求拦截器
fly.interceptors.request.use((request) => {
  wx.showLoading({
    title: '正在请求中...'
  })
  if (wx.getStorageSync('token')) { //检查本地缓存是否有token存在没有则重新获取
    request.headers["token"] = wx.getStorageSync('token');
  }
  return request;
}, (err) => {
  //发生网络错误后会走到这里
  return Promise.reject(err);
})
//添加响应拦截器
fly.interceptors.response.use(
  (response) => {
    return new Promise((resolve, reject) => {
      wx.hideLoading();
      const res = response.data;
      if (res.code === 200) {
        // if(res.msg){
        //   uti._showToast(res.msg,'success')
        // }
        resolve(res);
      } else {
        uti._showToast(res.msg || '获取失败')
        reject(res);
      }
    });
    return response; //请求成功之后将返回值返回
  },(err) => {
    console.log(err)
    //请求出错，根据返回状态码判断出错原因
    wx.hideLoading();
    if (err.msg && (err.status || err.status == 0)){
      if (err.status == 0) {
        uti._showToast('网络异常')
      } else if (err.status == 1) {
        uti._showToast('网络连接超时')
      } else if (err.status == 404) {
        uti._showToast('找不到远程服务器')
      } else if (err.status == 500) {
        uti._showToast('服务器错误')
      } else {
        if (err.msg) {
          config._showToast(err.msg)
        } else {
          config._showToast('获取失败')
        }
      };
    }
    return Promise.reject(err);
  }
)

/*
 *get方法，对应get请求
 *@param {String} url [请求的url地址]
 *@param {Object} params [请求时候携带的参数]
 */
function _get(url, params) {
  return new Promise((resolve, reject) => {
    fly
      .get(url, 
        {...params})
      .then(res => {
        resolve(res);
      })
      .catch(err => {
        reject(err);
      });
  });
}
/*
 *post方法，对应post请求
 *@param {String} url [请求的url地址]
 *@param {Object} params [请求时候携带的参数]
 */
export function _post(url, params) {
  return new Promise((resolve, reject) => {
    fly
      .post(url, {
        ...params
      })
      .then(res => {
        resolve(res);
      })
      .catch(err => {
        reject(err);
      });
  });
}
module.exports = {
  _get,
  _post,
  fly
}